package com.iot.fire.common.task;

import com.iot.fire.common.enums.DeviceOnlineStatus;
import com.iot.fire.common.enums.DeviceStatus;
import com.iot.fire.domain.TDevice;
import com.iot.fire.netty.NettyServerHandler;
import com.iot.fire.service.ITDeviceService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

@Slf4j
@Component
@RequiredArgsConstructor
public class ScheduledTasks {

    private final ITDeviceService deviceService;

    /**
     * 每六小时执行一次
     */
    //@Scheduled(cron = "0 0/5 * * * *")
//    public void performTask() {
//        long startTime = System.currentTimeMillis();
//        try {
//            List<TDevice> deviceList = deviceService.enableDeviceList(DeviceStatus.ENABLE);
//
//            if (CollectionUtils.isEmpty(deviceList)) {
//                log.info("暂无已启用的设备");
//                return;
//            }
//
//            log.info("开始检查 {} 个设备的在线状态", deviceList.size());
//
//            // 并行处理设备状态检查，提高大并发场景下的处理效率
//            List<TDevice> devicesToUpdate = deviceList.parallelStream().map(device -> {
//                try {
//                    boolean deviceConnected = NettyServerHandler.isDeviceConnected(device.getDeviceCode());
//                    // 设置正确的在线状态（修复原代码中的逻辑错误）
//                    String newStatus = deviceConnected ? DeviceOnlineStatus.ONLINE.getCode() : DeviceOnlineStatus.OFFLINE.getCode();
//                    boolean statusChanged = !newStatus.equals(device.getOnlineStatus());
//
//                    if (statusChanged) {
//                        device.setOnlineStatus(newStatus);
//                        return device;
//                    }
//                    return null;
//                } catch (Exception e) {
//                    log.warn("检查设备 [{}] 连接状态时发生异常: {}", device.getDeviceCode(), e.getMessage());
//                    return null;
//                }
//            }).filter(Objects::nonNull).collect(Collectors.toList());
//
//            // 批量更新有状态变化的设备
//            if (!devicesToUpdate.isEmpty()) {
//                deviceService.updateBatchById(devicesToUpdate);
//                log.info("成功更新 {} 个设备的在线状态", devicesToUpdate.size());
//            } else {
//                log.info("没有设备状态发生变化");
//            }
//
//        } catch (Exception e) {
//            log.error("执行设备状态检查任务时发生异常", e);
//        } finally {
//            long costTime = System.currentTimeMillis() - startTime;
//            log.info("设备状态检查任务完成，耗时: {}ms", costTime);
//        }
//
//    }
}
